home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / docs / ippon / ver / 050 / txfont.c < prev    next >
C/C++ Source or Header  |  2000-07-07  |  2KB  |  123 lines

  1. /* txfont.c テキスト画面に文字を出力 */
  2.  
  3. #include <sys/iocs.h>
  4. #include "txfont.h"
  5.  
  6. static char *page_ptr;        /* 表示画面の左上のアドレス */
  7. static short cursor_x = 0, cursor_y = 0;
  8. static char *cursor_ptr;    /* カーソル位置のアドレス */
  9.  
  10.  
  11.  
  12. /* 表示画面の左上のアドレスを指定(0xe00000 とか) */
  13. void TxfontPage (char *p)
  14. {
  15.     page_ptr = p;
  16.     cursor_ptr = p + cursor_y * 128 * 8 + cursor_x;
  17. }
  18.  
  19.  
  20.  
  21. void TxfontCursor (short x, short y)
  22. {
  23.     cursor_x = x;
  24.     cursor_y = y;
  25.     cursor_ptr = page_ptr + cursor_y * 128 * 8 + cursor_x;
  26. }
  27.  
  28.  
  29. int TxfontInit (void)
  30. {
  31.     TxfontPage ((void *) 0xe00000);        /* デフォルト値 */
  32.     return (0);
  33. }
  34.  
  35.  
  36.  
  37. /* 1文字表示(内部用・コントロールコードなし) */
  38. static void disp1 (char c)
  39. {
  40.     char *t;
  41.     unsigned char *p = font_data + (((int) c - 0x20) << 4);
  42.  
  43.     t = (char *) cursor_ptr;
  44.     *(t + 128 * 0) = *p++;
  45.     *(t + 128 * 1) = *p++;
  46.     *(t + 128 * 2) = *p++;
  47.     *(t + 128 * 3) = *p++;
  48.     *(t + 128 * 4) = *p++;
  49.     *(t + 128 * 5) = *p++;
  50.     *(t + 128 * 6) = *p++;
  51.     *(t + 128 * 7) = *p++;
  52.  
  53.     t += 0x020000;
  54.     *(t + 128 * 0) = *p++;
  55.     *(t + 128 * 1) = *p++;
  56.     *(t + 128 * 2) = *p++;
  57.     *(t + 128 * 3) = *p++;
  58.     *(t + 128 * 4) = *p++;
  59.     *(t + 128 * 5) = *p++;
  60.     *(t + 128 * 6) = *p++;
  61.     *(t + 128 * 7) = *p++;
  62.  
  63.     cursor_ptr++;
  64.     cursor_x++;
  65. }
  66.  
  67.  
  68.  
  69. /* 1文字表示 */
  70. void TxfontPutchar (char c)
  71. {
  72.     int sp;
  73.  
  74.     sp = _iocs_b_super (0);
  75.     switch (c) {
  76.     case 0x09:
  77.         cursor_x = (cursor_x + 8) & 0xfff8;
  78.         cursor_ptr = page_ptr + cursor_y * 128 * 8 + cursor_x;
  79.         break;
  80.     case 0x0d:
  81.         cursor_x = 0;
  82.         cursor_y++;
  83.         cursor_ptr = page_ptr + cursor_y * 128 * 8;
  84.         break;
  85.     case 0x0a:
  86.         break;
  87.     default:
  88.         disp1 (c);
  89.     }
  90.     if (sp > 0)
  91.         _iocs_b_super (sp);
  92. }
  93.  
  94.  
  95.  
  96. /* 文字列表示 */
  97. void TxfontPuts (char *c)
  98. {
  99.     int sp;
  100.  
  101.     sp = _iocs_b_super (0);
  102.     while (*c != 0) {
  103.         switch (*c) {
  104.         case 0x09:
  105.             cursor_x = (cursor_x + 8) & 0xfff8;
  106.             cursor_ptr = page_ptr + cursor_y * 128 * 8 + cursor_x;
  107.             break;
  108.         case 0x0d:
  109.             break;
  110.         case 0x0a:
  111.             cursor_x = 0;
  112.             cursor_y++;
  113.             cursor_ptr = page_ptr + cursor_y * 128 * 8;
  114.             break;
  115.         default:
  116.             disp1 (*c);
  117.         }
  118.         c++;
  119.     }
  120.     if (sp > 0)
  121.         _iocs_b_super (sp);
  122. }
  123.